home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
050
/
arglist.arc
/
ARGLIST2.PAS
< prev
Wrap
Pascal/Delphi Source File
|
1986-11-25
|
4KB
|
121 lines
{ This provides capabilities similar to argc/argv in C. You can now
read the argument list from your TURBO Pascal program. `argc' is
actually a function that returns the number of parameters on the
command line. Spaces are the separators between parameters. If the
parameter is enclosed in quotes ('), then any characters can appear.
If you want a quote, put two in the command line parameter.
Example
cmd 'this is the first' and 'this is the ''third'' argument'
This will return argc=3.
You can retrieve the arguments by calling argv(#)
Example
if the above was the command line, then the program
for i := 1 to argc do
writeln('argv(',i,') =<',argv(i),'>');
would print
argv(1) =<this is the first>
argv(2) =<and>
argv(3) =<this is the 'third' argument>
}
type
arglist_string = string[80];
const
arglist_max = 20;
arglist_number : integer = -1;
var
argvlist : array[1..arglist_max] of ^arglist_string;
function argv(num : integer) : arglist_string;
var
argument : arglist_string absolute cseg:$80;
newparm,parmline : arglist_string;
i,j : integer;
state : (leading_ws, non_quote, quoted, end_quote);
inchar : char;
procedure saveparm;
begin
if arglist_number < arglist_max then begin
arglist_number := arglist_number+1;
new(argvlist[arglist_number]);
argvlist[arglist_number]^ := newparm;
newparm := '';
end;
end;
begin
if arglist_number = -1 then begin
arglist_number := 0;
parmline := argument+' ';
state := leading_ws;
newparm := '';
for i := 1 to length(parmline) do begin
inchar := parmline[i];
case state of
leading_ws: begin
if inchar = '''' then state := quoted
else if inchar <> ' ' then begin
newparm := newparm+inchar;
state := non_quote;
end;
end;
non_quote: begin
if inchar = ' ' then begin
saveparm;
state := leading_ws;
end
else newparm := newparm+inchar;
end;
quoted: begin
if inchar = '''' then state := end_quote
else newparm := newparm+inchar;
end;
end_quote: begin
if inchar = '''' then begin
newparm := newparm+inchar;
state := quoted;
end
else if inchar <> ' ' then begin
newparm := newparm+inchar;
state := non_quote;
end
else begin
saveparm;
state := leading_ws;
end;
end;
end;
end;
end;
if (num > 0) and (num <= arglist_number) then
argv := argvlist[num]^
else argv := '';
end;
function argc : integer;
var
dummy : arglist_string;
begin
if arglist_number = -1 then dummy := argv(1); {force evaluation}
argc := arglist_number;
end;
egin
if arglist_number = -1 then dummy := argv(1); {force evaluation}
argc := arglist_number;
end;